/*
 * 根据配置文件生成 数据库接口类
 *
 * VERSION  DATE        BY              REASON
 * -------- ----------- --------------- ------------------------------------------
 * 1.00     2014.07.24  wuxiaogang      程序・发布
 * -------- ----------- --------------- ------------------------------------------
 * Copyright 2014 easycode System. - All Rights Reserved.
 *
 */
package cn.com.softvan.easycode.utils;

import java.io.File;
import java.io.PrintWriter;
import java.util.List;

import cn.com.softvan.common.IOHelper;
import cn.com.softvan.common.StrUtils;
import cn.com.softvan.common.Validator;
import cn.com.softvan.easycode.bean.ConfigBean;
import cn.com.softvan.easycode.bean.TableBean;
/**
 *  根据配置文件生成 数据库接口类
 * @author wuxiaogang 
 *
 */
public class DaoInterUtils {
	/**
	 * 生成 dao接口
	 * @param config
	 * @return
	 */
	public static StringBuffer toFile(ConfigBean config){
		StringBuffer csb=new StringBuffer("");
		try {
			if(null==config){
				return csb;
			}
			//TODO 获取表列表
			List<TableBean> tables=config.getTables();
			if(null==tables){
				return csb;
			}
			for(TableBean table:tables){
				try {
					//类名
					String className="";
					String xmlExtends=config.getSpringDaoXmlExtends();
					if(Validator.notEmpty(table.getSpringDaoXmlExtends())){
						xmlExtends=table.getSpringDaoXmlExtends();
					}
					//是否生成dao interfac 0否 1是
					String isDaoInter=config.getIsDaoInter();
					if(Validator.notEmpty(table.getIsDaoInter())){
						isDaoInter=table.getIsDaoInter();
					}
					if("0".equals(isDaoInter)){
						continue;
					}
					//存放内容
					StringBuffer sb=new StringBuffer("");
					//TODO ---1-----版本注释 --2---依赖包引入---类功能注释----
					sb.append(HeaderUtils.getHeader(config, "数据库处理接口类", table,3));
					
					//TODO ---3----创建类
					sb.append("\n");
					sb.append("public interface ");
					if(Validator.isEmpty(table.getClassName())){
						className="I"+StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_")+"Dao";
					}else{
						className="I"+table.getClassName()+"Dao";
					}
					sb.append(className);

					
					//-//TODO--3.1--继承----3.2--接口实现----
					sb.append(HeaderUtils.setExtendsAndimplements(config, table, 3));
					
					//--
					sb.append("{\n");
					
					//TODO-- 批量操作--
					sb.append("/**\n");
				    sb.append(" * 新增 批量\n");
					sb.append(" */\n");
					sb.append("int insertBatch(List<"+StrUtils.toUpperCase(StrUtils.getRidprefixTableName(config.getRidprefixlen(),table.getTableName()),"_")+"> dtos) throws Exception;");
					
					sb.append("\n}");
					//文件保存路径 项目根目录+包路径+类名称
					String fileurl=config.getJavaDirUrl()+config.getDaointerPackage().replace(".", "/");
					//创建文件夹
			    	File saveDirFile = new File(fileurl);
			    	if (!saveDirFile.exists()) {
			    		saveDirFile.mkdirs();
			    	}
					//写入文件
					IOHelper.saveFile(fileurl+"/"+className+".java",sb.toString());
					//TODO 生成配置文件信息
					csb.append("\n\t<!-- "+table.getTableNote()+" 数据库处理接口类	 -->");
					csb.append("\n\t<bean id=\""+StrUtils.toLowerCaseFirstOne(className.substring(1,className.length()))+"\"");
					if(Validator.notEmpty(xmlExtends)){
						csb.append(" parent=\""+xmlExtends+"\"");
					}
					csb.append(">");
					csb.append("\n\t	<property name=\"mapperInterface\" value=\""+config.getDaointerPackage()+"."+className+"\"></property>");
					csb.append("\n\t</bean>");
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return csb;
	}
}
